﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Arcana.Contract
{
    /// <summary>
    /// Represents a contract. All contracts inherit from this interface.
    /// </summary>
    public interface IContract
    {
        /// <summary>
        /// Represents type of exception to throw if contract validation fails.
        /// </summary>
        /// <value>
        /// The type of exception to throw, if the contract validation fails.
        /// </value>
        /// <remarks>
        /// This value must inherit from <see cref="System.Exception"/> class. This value is set to
        /// <see cref="System.ArgumentException"/> by default.
        /// </remarks>
        /// <exception cref="ArgumentNullException"><i>value</i> is <b>null</b>.</exception>
        /// <exception cref="ArgumentException"><i>value</i> does not inherit from <see cref="System.Exception"/></exception>
        Type Exception { get; set; }
    }
}
